Concept: Balance Competing Stakeholder Priorities
This principle articulates the importance of balancing stakeholder needs.
Main Description

Introduction

This principle articulates the importance of balancing often conflicting business and stakeholder needs, as well as balancing custom development versus asset reuse in the satisfaction of these needs.

    
Benefits
  • Align applications with business and user needs
  • Reduce custom development
  • Optimize business value
Pattern
  1. Define, understand, and prioritize business and user needs
  2. Prioritize projects and requirements and couple needs with software capabilities;
  3. Understand what assets we can leverage;
  4. Balance asset reuse with user needs
Anti-Patterns
  • Thoroughly document precise requirements at the outset of the project, force stakeholder acceptance of requirements
    • Negotiate any changes to the requirements, where each change may increase the cost or duration of the project,
    • Lock down requirements up-front, thereby reducing the ability to leverage existing assets,
    • Primarily perform custom development.
  • Architect a system only to meet the needs of the most vocal stakeholders.

Discussion

For example, most stakeholders would prefer having an application that does exactly what they want it to do, while minimizing the application's development cost and schedule time. Yet, these priorities are often in conflict. Another example is that if we leverage a packaged application, we may be able to deliver a solution faster and at a lower price, but we may have to trade-off many requirements. If instead, we elect to build an application from scratch, it may be able to address every requirement on its wish list, but the budget and project completion date can both be pushed beyond their feasible limits.

Using a component can radically reduce costs and schedule to deliver a certain set of functionality. In many cases we must also compromise on some functional or technical requirements, such as platform support, performance, or foot print (physical size of the application).

To be in a position to balance needs, we must first manage requirements effectively as described in  Supporting Material: Requirement Management. Rather than sending programming teams out to attack each element in a requirements list, we need to understand and prioritize business and stakeholder needs. This means capturing business processes and linking them to projects and software capabilities, which enables us to effectively prioritize projects and requirements, and to modify our prioritization as our understanding of the application increases and stakeholder needs evolve. It also means that we need to involve the customer or customer representative in the project to ensure we understand what their needs are.

At the same time, we need to center development activities around stakeholder needs. For example, by leveraging use-case driven development and user-centered design, our development process can accommodate the evolution of stakeholder needs over the course of the project, as a function of changing business and of our improved understanding of the capabilities that are truly important to the business and the end users. 

Finally, we need to understand what assets are available and balance asset reuse with stakeholder needs. Examples of assets include legacy applications, services, reusable components, and patterns. Reuse of assets can, in many cases, lead to reduced project cost. Reusing proven assets often means higher quality in new applications. The drawback is that, in many cases, we must trade off asset reuse and perfect satisfaction of user needs.Reusing a component may lower development costs for a feature by 80 percent, but this may only address 75 percent of the requirements. So, effective reuse requires us to constantly balance the reuse of assets with evolving stakeholder needs.